package com.helin.helinhealth.service;

import com.helin.helinhealth.dto.AdminLoginRequest;
import com.helin.helinhealth.dto.AdminRegisterRequest;
import com.helin.helinhealth.entity.Admin;

/**
 * 管理员服务接口
 * 
 * <p>
 * 该接口定义了管理员相关的业务逻辑操作，主要处理后台管理系统的用户认证、
 * 用户注册等功能。是后台管理系统用户管理的核心组件。
 * </p>
 * 
 * <p>
 * 主要功能包括：
 * - 管理员登录认证
 * - 管理员注册
 * - 管理员信息获取与修改
 * </p>
 */
public interface AdminService {

    /**
     * 管理员登录
     * 
     * <p>
     * 验证用户名和密码是否正确，生成JWT令牌返回。
     * 同时更新用户的最后登录时间。
     * </p>
     * 
     * @param loginRequest 登录请求DTO
     * @return JWT令牌
     */
    String login(AdminLoginRequest loginRequest);
    
    /**
     * 管理员注册
     * 
     * <p>
     * 注册新的管理员账号，包括验证用户名是否已存在、
     * 密码加密存储等操作。注册成功后返回新用户信息。
     * </p>
     * 
     * @param registerRequest 注册请求DTO
     * @return 用户信息
     */
    Admin register(AdminRegisterRequest registerRequest);
    
    /**
     * 根据用户名获取管理员信息
     * 
     * <p>
     * 根据用户名查询管理员信息，用于登录认证和信息展示。
     * </p>
     * 
     * @param username 用户名
     * @return 管理员信息
     */
    Admin getAdminByUsername(String username);
    
    /**
     * 检查用户名是否已存在
     * 
     * <p>
     * 用于注册时验证用户名是否可用。
     * </p>
     * 
     * @param username 用户名
     * @return 是否已存在
     */
    boolean isUsernameExists(String username);
    
    /**
     * 更新管理员最后登录时间
     * 
     * <p>
     * 登录成功后调用此方法更新用户的最后登录时间。
     * </p>
     * 
     * @param id 管理员ID
     */
    void updateLastLoginTime(Long id);
} 